"""
xpath->库：lxml：解析本地文件 open("xpath01-基本使用.html")
              ：解析网页文件（服务器响应的数据：response.read().decode("utf-8")）
"""
from lxml import etree

# 解析本地：etree.parse()
# 解析网页文件：etree.HTML()

# 1. lxml解析本地文件
tree = etree.parse(open("xpath01-基本使用.html"))
print(tree)
print('*'*100)

# 2.xpath路径查询
# // 查找所有子孙节点，不考虑层级关系
# /  查找儿子节点，仅仅是下面第一层
li_list: list = tree.xpath('//ul/li')  # 查询ul下的li标签
print(li_list)
print('*'*100)

# 3. xpath 谓词查询
# div[@class] div[@id=' ']
# /text()代表获取内容
li_list: list = tree.xpath('//ul/li[@class]/text()')  # 查询ul下的有class属性的所有li标签
print(li_list)
li_list: list = tree.xpath('//ul/li[@id="beijing"]/text()')  # 查询ul下的有id属性是beijing的li标签
print(li_list)
print('*'*100)

# 4. xpath 属性查询
# div/@class
li_list: list = tree.xpath('//ul/li[@id="beijing"]/@class')  # 查询ul下的id属性是beijing的li标签的class属性值
print(li_list)
print('*'*100)

# 5. xpath 模糊查询
# div[contains(@id,"i")] div[starts-with(@id,"sh")
li_list: list = tree.xpath('//ul/li[contains(@id,"i")]')  # 查询ul下的id属性包含字母i的li标签
print(li_list)
li_list: list = tree.xpath('//ul/li[starts-with(@id,"sh")]')  # 查询ul下的id属性以sh开头的li标签
print(li_list)
print('*'*100)


